﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Security.Principal;

namespace StuertzDatenbank
{
    public partial class Benutzerwahl : Form
    {
        private Sprachfile sprachfile;
        private bool nichtregistrierterbenutzer;
        private Benutzer testbenutzer;
        private bool Serververfuegbar;
        public Benutzerwahl(startgui gui)        
        {
            
           

            benutzerliste = new List<Benutzer>();
            dbf = new DBF();


            Serververfuegbar = false;
            this.Gui = gui;
            Verbindungpruefen();
            sprachfile = new Sprachfile();
            if (Serververfuegbar)
            {
                benutzerlisteladen();   
            }
                       
            
            InitializeComponent();
            InitializeComponentChange();
            Refresh();

            for (int i = 0; i < this.benutzerliste.Count; i++)
            {
                this.comboBox1.Items.Add(this.benutzerliste[i].getbenutzername());
            }
            try
            {
                this.comboBox1.SelectedIndex = 0;
            }
            catch (Exception)
            {
               
            }
           
        }

        private void Verbindungpruefen()
        {
            InArbeitGui iAGui = new InArbeitGui();
            iAGui.Show();
            iAGui.BringToFront();
            iAGui.Refresh();




            if (dbf.VerbindungPruefen())
            {
                Serververfuegbar = true;
                iAGui.Dispose();
                return;


            }
            else
            {
                Serververbindungsgui svgui = new Serververbindungsgui();
                iAGui.Dispose();
                svgui.ShowDialog();

                dbf = new DBF();

                iAGui = new InArbeitGui();
                iAGui.Show();
                iAGui.BringToFront();
                iAGui.Refresh();

                if (dbf.VerbindungPruefen())
                {
                    Serververfuegbar = true;
                }
                iAGui.Dispose();


            }
           
        }

        private void InitializeComponentChange()
        {
            this.button1.Text = sprachfile.Start;
            this.Text = sprachfile.Benutzerwahl;
            this.label1.Text = sprachfile.Login;
            this.Verbindungsbutton.Text = sprachfile.NichtVerbunden;
            

            if (Serververfuegbar)
            {
                 this.Verbindungsbutton.Text = sprachfile.Verbunden;
            }

            Verbindungsbutton.Enabled = false;
            bool IsAnAdministrator = false;
                  {
                         WindowsIdentity  identity =WindowsIdentity.GetCurrent();
                       WindowsPrincipal principal = new WindowsPrincipal (identity);
                    IsAnAdministrator=  principal.IsInRole(WindowsBuiltInRole.Administrator);
                    }

            if (IsAnAdministrator)
            {
                Verbindungsbutton.Enabled = true;
            }
        }

        private void benutzerlisteladen()
        {
            benutzerliste.Clear();

            try
            {
                Benutzer be = new Benutzer(-1);
                be = dbf.getBenutzerByName(System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\')[1]);
                if (be.getMitarbeiternummer() > -1)
                {
                    
                    benutzerliste.Add(be);
                }
                if (be.getMitarbeiternummer()==-1)
                {
                    nichtregistrierterbenutzer = true;
                }

                List<Rolle> rollenliste = new List<Rolle>();
                rollenliste = dbf.alleRollenAusgeben();

                for (int i = 0; i < rollenliste.Count; i++)
                {
                    Benutzer rollebe = new Benutzer(-1);
                    rollebe.setMitarbeiternummer(be.getMitarbeiternummer());
                    rollebe.setBenutzername(rollenliste[i].getRollenbezeichnung());
                    rollebe.setRolle(rollenliste[i]);
                    benutzerliste.Add(rollebe);
                }

                



            
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                
            }
            
           
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (nichtregistrierterbenutzer)
            {
                 this.textBox1.Visible = true;
                 this.Refresh();
            }
            else
            {
                if (comboBox1.SelectedIndex > 0)
                {
                    this.textBox1.Visible = true;
                    this.Refresh();
                }
                else
                {
                    this.textBox1.Visible = false;
                    this.Refresh();

                }
            }
           

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (nichtregistrierterbenutzer)
            {
                 if (this.textBox1.Text==benutzerliste[this.comboBox1.SelectedIndex].getRolle().getPasswort()|| this.comboBox1.SelectedItem.ToString()==testbenutzer.getbenutzername().ToString())
                {
                     this.Gui.setBenutzer(benutzerliste[this.comboBox1.SelectedIndex]);
                        this.Dispose();
                }
            }
            else
            {
                if (this.comboBox1.SelectedIndex > 0)
                {
                    if (this.textBox1.Text == benutzerliste[this.comboBox1.SelectedIndex].getRolle().getPasswort())
                    {
                        this.Gui.setBenutzer(benutzerliste[this.comboBox1.SelectedIndex]);
                        this.Dispose();
                    }
                    else
                    {
                        MessageBox.Show(sprachfile.Passwortfalsch);
                    }
                }
                else
                {
                    this.Gui.setBenutzer(benutzerliste[this.comboBox1.SelectedIndex]);
                    this.Dispose();
                }
            }
           
            
            
            
            }
        
            
        

        private void BenutzerWahlTest_Load(object sender, EventArgs e)
        {
           
        }

        public startgui Gui { get; set; }

        public List<Benutzer> benutzerliste { get; set; }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        public DBF dbf { get; set; }

        private void Verbindungsbutton_Click(object sender, EventArgs e)
        {
            Serververbindungsgui svgui = new Serververbindungsgui();
            svgui.ShowDialog();
            dbf = new DBF();
            InArbeitGui iAGui = new InArbeitGui();
            iAGui.Show();
            iAGui.BringToFront();
            iAGui.Refresh();

            comboBox1.Items.Clear();
            comboBox1.Text = "";
            Refresh();

            if (dbf.VerbindungPruefen())
            {
                Serververfuegbar = true;
                Verbindungsbutton.Text = sprachfile.Verbunden;
                benutzerlisteladen();
                Refresh();


                for (int i = 0; i < this.benutzerliste.Count; i++)
                {
                    this.comboBox1.Items.Add(this.benutzerliste[i].getbenutzername());
                }
                try
                {
                    this.comboBox1.SelectedIndex = 0;
                }
                catch (Exception)
                {

                }

            }
            else
            {
                Verbindungsbutton.Text = sprachfile.NichtVerbunden;
            }


            iAGui.Dispose();




        }

        
    }
         
         
}
